# **TTS-with-RVC** 0.1.3


[![en](https://img.shields.io/badge/English-EN-red.svg)](https://gitverse.ru/Atm4x/TTS-with-RVC-dev/content/main/ZREADME-en.md)

***TTS-with-RVC** (Text-to-Speech with RVC)* — это пакет, предназначенный для улучшения возможностей систем *text-to-speech (TTS)* с помощью модуля *RVC*. Пакет позволяет пользователям не только конвертировать текст в речь, но и персонализировать и настраивать голосовой вывод в соответствии с их предпочтениями, поддерживая RVC.

Для работы TTS-with-RVC требуется Pytorch с поддержкой CUDA или MPS.

**Может содержать ошибки. Сообщайте о проблемах.**

## Примечания к выпуску

**0.1.3** - исправлено много проблем, некоторая оптимизация. 

## Необходимые условия

Необходимо установить **Python<=3.10** (рекомендуется 3.10).

Необходимо поддержка **CUDA или MPS** для вашего GPU (MPS пока не тестировалась).

## **Установка**
1) Установите pytorch **с поддержкой CUDA или MPS** здесь: https://pytorch.org/get-started/locally/

2) Затем установите TTS-with-RVC с помощью pip install:
```
python -m pip install git+https://github.com/Atm4x/tts-with-rvc.git#egg=tts_with_rvc
```
3) После этого установите rvc:
```
python -m pip install git+https://github.com/Atm4x/rvc-lib.git@dev#egg=rvc
```
4) Затем установите rvc как репозиторий:
```
python -m pip install -e git+https://github.com/Atm4x/rvc-lib.git#egg=rvclib
```  
5) Под конец установите [исправленную](https://github.com/Atm4x/rvc-tts-pipeline-fix) версию rvc-tts-pipeline:
```
python -m pip install git+https://github.com/Atm4x/rvc-tts-pipeline-fix.git@dev#egg=rvc_tts_pipe
```
6) И, наконец, установите [ffmpeg](https://ffmpeg.org/download.html), если он у вас еще не установлен, и добавьте его в папку со скриптом **или лучше** добавьте ffmpeg в `Переменные среды` в `Path`. 

## Как это работает
1. **Text-to-Speech (TTS):** Пользователи вводят текст в модуль TTS, который затем обрабатывает его и генерирует соответствующую речь в виде файла, сохраненного в введенной входной директории.
2. **RVC:** При наличии .pth файла, модуль RVC считывает сгенерированный аудиофайл, обрабатывает его и сохраняет новый аудиофайл в *output_directory* с замененным голосом.

## Использование

TTS-with-RVC имеет класс `TTS_RVC`. Есть несколько необходимых параметров:

`rvc_path` - путь к вашему **установленному** каталогу *rvclib* (обычно в папке venv/src).

`input_directory` - путь к вашей входной директории (временная директория для сохранения вывода TTS).

`model_path` - путь к вашему .pth модели.

И необязательные параметры:

`voice` - голос из списка edge-tts *(по умолчанию "ru-RU-DmitryNeural")*.

`output_directory` - директория для сохранения озвученных аудиофайлов (`temp/` по умолчанию).

Для установки голоса сначала создайте экземпляр TTS_RVC:

```python
from tts_with_rvc import TTS_RVC

tts = TTS_RVC(rvc_path="src\\rvclib", model_path="models\\YourModel.pth", input_directory="input\\")
```

Все доступные голоса размещены в файле `voices.txt`:

`tts.get_voices()` **отключен на неопределенный срок из-за проблем**.

Далее установите голос для TTS с помощью функции `tts.set_voice()`:

```python
tts.set_voice("un-Un-SelectedNeural")
```

Установка соответствующего языка необходима, если вы используете другие языки для озвучивания!

И последний шаг — вызов функции `tts` для замены голоса:

```python 
path = tts(text="Привет, мир!", pitch=6)
```

Параметры:

`text` - текст для TTS (обязательно).

`pitch` - высота тона для RVC (необязательно, отрицательные значения совместимы, по умолчанию 0).

`tts_rate` - дополнительная скорость речи (необязательно, отрицательные значения совместимы, по умолчанию 0).

`tts_volume` - дополнительная громкость речи (необязательно, отрицательные значения совместимы, по умолчанию 0).

`tts_pitch` - дополнительная высота тона для аудио, сгенерированного TTS (необязательно, отрицательные значения совместимы, <b>не рекомендуется</b>, по умолчанию 0).

`output_filename` - заданный путь для озвученного аудио (необязательно, по умолчанию `None`).

## Пример использования
Простой пример для озвучивания текста:

```python
from tts_with_rvc import TTS_RVC
from playsound import playsound

tts = TTS_RVC(rvc_path="src\\rvclib", model_path="models\\DenVot.pth", input_directory="input\\")
tts.set_voice("ru-RU-DmitryNeural")
path = tts(text="Привет, мир!", pitch=6)

playsound(path)
```
## Параметры текста

Есть некоторые параметры текста для интеграции, такие как добавление модуля GPT.

Вы можете обработать их с помощью `process_args` в классе `TTS_RVC`:

`--tts-rate (value)` - параметр TTS для изменения скорости речи (отрицательное значение для уменьшения скорости и положительное для увеличения).

`--tts-volume (value)` - параметр TTS для изменения громкости речи (отрицательное значение для уменьшения громкости и положительное для увеличения) <b>Кажется, не работает из-за преобразования модуля RVC.</b>

`--tts-pitch (value)` - параметр TTS для изменения высоты тона аудио, сгенерированного TTS (отрицательное значение для уменьшения высоты тона и положительное для увеличения) <b>Не рекомендую использовать, так как модуль RVC имеет свой собственный `pitch` для вывода.</b>

`--rvc-pitch (value)` - параметр RVC для изменения высоты тона выходного аудио (отрицательное значение для уменьшения высоты тона и положительное для увеличения).

Теперь принцип работы:

```python
from tts_with_rvc import TTS_RVC

tts = TTS_RVC(rvc_path="src\\rvclib", model_path="models\\YourModel.pth", input_directory="input\\")

# Этот метод возвращает аргументы и оригинальный текст без этих текстовых параметров
args, message = tts.process_args(message)
```

Переменная `args` содержит массив со следующей структурой:

`args[0]` - скорость TTS.

`args[1]` - громкость TTS.

`args[2]` - высота тона TTS.

`args[3]` - высота тона RVC.

И теперь мы готовы использовать это для генерации:
```python
path = tts(message, pitch=args[3],
               tts_rate=args[0],
               tts_volume=args[1],
               tts_pitch=args[2])
```

## Исключения
1) NameError:
```NameError: name 'device' is not defined```

Убедитесь, что ваше устройство поддерживает CUDA и вы установили правильную версию Torch.

2) RuntimeError:
```RuntimeError: Failed to load audio: {e}```

Убедитесь, что вы установили `ffmpeg`.

## Лицензия
Нет лицензии.

## Авторы
[Atm4x](https://github.com/Atm4x) (Артем Дикарев).